package com.demo.java.spi.test;

import com.demo.java.spi.spring.LoggingSystemFactory;
import org.springframework.core.io.support.SpringFactoriesLoader;

import java.util.Iterator;
import java.util.List;

/***
 * spring的SPI通过META-INF/spring.factories文件加载，
 * 以扩展的接口为Key，扩展实现为value，多个扩展实现使用逗号分隔，
 * 所有的扩展可以放在同一个文件中，避免了混乱。
 * 优先加载项目中的spring.factories，所以可以通过获取第一个来获取扩展实现
 */
public class SpringServiceLoad {
    public static void main(String[] args) {
        List<LoggingSystemFactory> factories =
                SpringFactoriesLoader.loadFactories(
                        LoggingSystemFactory.class,
                        Thread.currentThread().getContextClassLoader()
                );
        Iterator<LoggingSystemFactory> iter = factories.iterator();
        while (iter.hasNext()) {
            iter.next().getLoggingFactory().log();
        }
    }
}
